/**
 * 日期对象
 */
export class Moment {
  private date: Date;
  constructor(date?: string | number | Date) {
    this.date = date ? new Date(date) : new Date();
  }
  /**
   * 日期格式化
   * @param fmt 格式 如: YYYY-MM-DD HH:mm:ss 表示 2019-06-06 19:45
   */
  format(fmt?: string) {
    const date: Date = this.date;
    let result: string = fmt || 'YYYY-MM-DD HH:mm:ss';
    const opt: Record<string, string> = {
      'Y+': date.getFullYear().toString(),
      'M+': (date.getMonth() + 1).toString(),
      'D+': date.getDate().toString(),
      'H+': date.getHours().toString(),
      'm+': date.getMinutes().toString(),
      's+': date.getSeconds().toString(),
      'S+': date.getMilliseconds().toString(),
    };
    let ret: any = '';
    for (const k in opt) {
      ret = RegExp('(' + k + ')').exec(result);
      if (ret) {
        result = result.replace(ret[1], ret[1].length == 1 ? opt[k] : opt[k].padStart(ret[1].length, '0'));
      }
    }
    return result;
  }
}
